package ar.edu.sovietrussia;

import java.util.ArrayList;
import java.util.List;

import utils.Pair;
import exceptions.EmptyEquipoException;


/**
 * TODO: description
 */
public class Equipo implements Nombrable {

	//-----INSTANCE VARIABLES ---------------------------------------//
	
	private Integer id;
    private String nombre;
    private Tecnico tecnico;
    private List<Jugador> jugadores;
    
	//-----CONSTRUCTORS ---------------------------------------//
	
    protected Equipo(){
    }

	public Equipo(final String nombre) {
        this.nombre = nombre;
        this.jugadores = new ArrayList<Jugador>();
    }

	//-----ACCESORS ---------------------------------------//
	

    public void setNombre(String nombre) {
		this.nombre = nombre;
	}

	public void setJugadores(List<Jugador> jugadores2) {
		this.jugadores = jugadores2;
	}

	public List<Jugador> getJugadores() {
		return jugadores;
	}

    public String getNombre() {
        return this.nombre;
    }

    public void setTecnico(final Tecnico nuevoTecnico) {
        this.tecnico = nuevoTecnico;
    }

    public Tecnico getTecnico() {
        return this.tecnico;
    }

    public Integer getId() {
    	return id;
    }
    
    public void setId(Integer id) {
    	this.id = id;
    }
    
	//-----OTHER BEHAVIOUR ---------------------------------------//
	
    public Formacion armarFormacion() {
        return this.getTecnico().armarFormacion(this);
    }
    public void addJugador(Jugador jugador){
    	this.jugadores.add(jugador);
    }
    
    //-----------------------------------------------------------//
    
    public Jugador bestPlayerForPosition(Posicion aPosicion){
    	if(this.jugadores.isEmpty()){
    		throw new EmptyEquipoException("El equipo no tiene jugadores!");
    	}
    	else{
    		Pair<Jugador,Integer> candidate = new Pair<Jugador,Integer>
    		(this.jugadores.get(0),this.jugadores.get(0).getValor(aPosicion));
    		
    		for(Jugador it : this.jugadores){
    			Pair<Jugador,Integer> current = new Pair<Jugador,Integer>
        		(it,it.getValor(aPosicion));
    			
    			if(current.getSecond()>candidate.getSecond()){
    				candidate = current;
    			}
    		}
    		return candidate.getFirst();
    	}
    }


}
